現今網路世界中駭客的攻擊層出不窮,除了讓使用者的個資外洩之外,也導致企業蒙受巨大損失,所以建立 Application 部署環境時,除了要考慮擴展性、可移植性之外,如何強化安全性也是個重要課題。本篇會介紹 Istio 擁有哪些 Security 功能,幫助我們加密、驗證 Application 流量。
將應用程式從 Monolithic 改成 Microservices 架構雖然能帶來許多好處,但服務之間的流量增加也讓駭客有機會趁虛而入,所以在使用 Microservices 時會有額外的安全需求,包含需對流量進行加密以抵禦 man-in-the-middle attacks(中間人攻擊),以及在服務設置訪問策略以防未授權的流量進入系統等等,藉此保障服務的安全性。
在 Istio Scurity 提供了許多功能來幫助你解決應用程式的安全問題,包括提供強大的身份認證、TLS 加密等等機制,幫助我們保護服務及數據,達到安全目標如下
無需修改程式碼及基礎設施即可保護應用程式。
在現有的安全機制下提供更多層的防禦。
在不安全的網路也能建立安全的解決方案。
Istio Security Overview,圖片取至 Istio Docoment - Security
而 Istio Security 的實作方法,是在 Control Plane 管理 Certificate、認證策略等安全功能,並讓 Data Plane 中的 Sidecar 保護點對點之間的流量,以達成保護整個 Service Mesh 網路。
Istio Security 架構圖,圖片取至 Istio Docoment - Security
看到這裡可能會有一個疑問?用 mTLS 保護外部的流量很重要,但為何 Microservices 內部的流量也需要加密呢?若以抽象化角度看 Kubernetes,流量都在 Cluster 內部,資料的傳輸看似沒什麼安全問題。
以抽象化的角度看 Kubernetes ,Pod 之間的流量都在系統內部。
但實際上 Kubernetes Cluster 是由好幾個 Node 作爲運算單元所組成,這些 Node 可能放在同個機房也可能放在不同地區,而同一個 Microservices 元件不一定會部署到同個 Node 上,所以元件之間的流量可能會經過 Internet ,若是沒對封包內容進行加密,裡面又有使用者的敏感資訊時,駭客就能擷取封包獲取這些敏感資料。
實際上 Kubernetes 由好幾個 Node 形成,Node 之間的流量經過 Internet 時若沒加密就會產生資安問題。
在 Istio 如何實現 Security 功能,其實在安裝時系統就會預設將 mTLS 功能打開,不需要修改程式碼或做額外設定下,也能在不安全的網路中提升應用程式的安全性。